keystone设计的policy role based access controls(RBAC)非常有意思,最终暴露给用户的是一种简单的可编辑的语义规则。
举个例子如下:
1 | { |
keystone的policy使用的driver默认配置是如下:
driver = keystone.policy.backends.sql.Policy
每个相应的API的访问请求都会经过相应RBAC的检测,
在keystone中的API是通过filterprotected,protected的decorator来作用的,
调用入口:
1 | self.policy_api.enforce(creds, |
具体的时序图以get_user为例如下:
Enforcer这个类其中的enforce方法逻辑如下:
1 | .... |
其中各种rule的就是各种规则来实现不同角色的权限管理,
具体的rule类层次结构如下:
下次我们将对其policy语言的解析处理进行详细的分析